/**
 *	5.rearrange函数中的语句在输入行的长度少于列范围时就退出，这条语句只有在列范围是递增的情况下正确，
 *	然而事实并不一定如此，(比如3,4,1,2,-1 或者 3 5 6 4 -1)修改rearrange函数使得在任何情况下都正确
**/
void rearrange(char * output, char const * input, int n_columns, int columns[])
{
	int col;
	int output_col;
	int len;

	len = strlen(input);
	output_col = 0;

	for(col = 0; col < n_columns; col += 2)
	{
		int nchars = columns[col + 1] - columns[col] + 1;
	
		if(output_col >= MAX_INPUT - 1)
			break;

		if(nchars <= 1)
		{
			printf("columns error, begin small than end!\n");
			break;
		}

		if(columns[col] >= len)
			continue;

		if(output_col + nchars > MAX_INPUT - 1)
			nchars = MAX_INPUT - 1 - output_col;
		
		strncpy(output + output_col, input + columns[col], nchars);
		output_col += nchars;
	}
	output[output_col] = '\0';
}
